package work2_28;

public class Effectual {
    /**
     * 给定一个只包括 '('，')' 的字符串，判断字符串是否有效。
     * 有效字符串需满足：
     * 左括号必须用相同类型的右括号闭合.
     * 左括号必须以正确的顺序闭合。
     *注意空字符串可被认为是有效字符串。
     */
    public static void main(String[] args) {
        String str="()()()";
        String str1="()())()";
        System.out.println(isEffective(str));
        System.out.println(isEffective1(str1));
    }

    private static boolean isEffective(String str) {
        int length=str.length();
        if(length%2!=0){
            return false;
        }
        int leftcount=0;
        //遍历
        for (int i = 0; i < length; i++) {
            if(str.charAt(i)=='('){
                leftcount++;
            }else{
                leftcount--;
                if(leftcount<0){
                    return false;
                }
            }
        }
        return leftcount==0;
    }
    private static boolean isEffective1(String str1){
        //定义数组长度
        int length= str1.length();
        //判断是否是偶数，成对
        if(length%2!=0){
            return false;
        }
        //将检查到的括号替换成空字符串
        String replaceStr1= str1.replace("()","");
        //定义新生成的数组长度
        int newLength=replaceStr1.length();//0
        //判断原数组的长度是否与新数组的长度一样，或者新数组的长度为0就退出循环
        while(length!=newLength||newLength!=0){
            //把新数组的长度赋值个旧数组的长度
            length=newLength;
            //替换
            replaceStr1=replaceStr1.replace("()","");
            newLength=replaceStr1.length();
        }
        return replaceStr1.length()==0;
    }
}

